Untitled

Carga de paquetes

::: {.cell labe=‘carga- paquetes’ code- fold=‘show’}

# Carga de paquetes
library(tidyverse)
library(DT)
library(sf)
library(rgdal)
library(raster)
library(terra)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(viridisLite)

:::

Carga de datos

Cantones

::: {.cell labe=‘carga- cantones’ code- fold=‘show’}

cantones<-
  st_read("cantones_2020_simp_10m.geojson",
          quiet= TRUE
          ) |>
  st_transform(4326)

:::

Carga de datos

Registros de viperidos

::: {.cell labe=‘carga- viperidos’ code- fold=‘show’}

# Carga de datos de viperidos de Costa Rica
viperidos <-
  st_read(
    "viperidos.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
      "Y_POSSIBLE_NAMES=decimalLatitude"   # columna de latitud decimal
    ),
    quiet = TRUE
  )

# Asignación del CRS WGS84
st_crs(viperidos) <- 4326

:::

Unión (join) espacial de cantones que son pologonos con registros de viperidos (pts)

::: {.cell labe=‘carga- union-viperidos-cantones’ code- fold=‘show’}

viperidos_union_cantones <- 
  st_join(
    x = viperidos,
    y = dplyr::select(cantones, cod_canton), # selección de columna cod_canton
    join = st_within
  )

# Despliegue de los datos unidos de viperidos y la columna cod_canton de cantones
viperidos_union_cantones |>
  st_drop_geometry() |>
  dplyr::select(species, locality, cod_canton) |>
  datatable(
    colnames = c("Especie", "Localidad", "Código de cantón"),
    options = list(
      pageLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
    )
  )

:::

Conteo de viperidos por cantón

::: {.cell labe=‘carga- conteo-viperidos-cantones’ code- fold=‘show’}

riqueza_especies_viperidos_cantones <-
  viperidos_union_cantones |>
  st_drop_geometry() |> #para quitar la geometria
  group_by(cod_canton) |>
  summarize(riqueza_especies_viperidos = n_distinct(species, na.rm = TRUE)) # n.a para quitar nulos

:::

##3. Unión no espacial de cantones con el dataframe de riqueza de especies en cantones

::: {.cell labe=‘carga- union-cantones-riqueza’ code- fold=‘show’}

cantones_union_riqueza <-
  left_join(
    x = cantones,
    y = riqueza_especies_viperidos_cantones,
    by = "cod_canton"
  ) |>
  replace_na(list(riqueza_especies_viperidos = 0)) #para cambiar nulo por 0

:::

##4 Mapa

::: {.cell labe=‘mapa riqueza’ code- fold=‘show’}

# Paleta de colores de riqueza de especies
colores_riqueza_especies <-
  colorNumeric(
    palette = "Reds",
    domain = cantones_union_riqueza$riqueza_especies_viperidos,
    na.color = "transparent"
  )

# Paleta de colores de especies
colores_especies <- colorFactor(
  palette = viridis(length(unique(viperidos$species))), 
  domain = viperidos$species
)

# Mapa leaflet
leaflet() |>
  setView(
    lng = -84.19452,
    lat = 9.572735,
    zoom = 7) |>
  addTiles(group = "Mapa general (OpenStreetMap)") |>
  addProviderTiles(
    providers$Esri.WorldImagery, 
    group = "Imágenes satelitales (ESRI World Imagery)"
  ) |> 
  addPolygons(
    data = cantones_union_riqueza,
    fillColor = ~ colores_riqueza_especies(cantones_union_riqueza$riqueza_especies_viperidos),
    fillOpacity = 0.8,
    color = "black",
    stroke = TRUE,
    weight = 1.0,
    popup = paste(
      paste("<strong>Cantón:</strong>", cantones_union_riqueza$canton),
      paste("<strong>Riqueza de especies:</strong>", cantones_union_riqueza$riqueza_especies_viperidos),
      sep = '<br/>'
    ),
    group = "Riqueza de especies"
  ) |>
  addScaleBar(
    position = "bottomleft", 
    options = scaleBarOptions(imperial = FALSE)
  ) |>    
  addLegend(
    position = "bottomleft",
    pal = colores_riqueza_especies,
    values = cantones_union_riqueza$riqueza_especies_viperidos,
    group = "Riqueza de especies",
    title = "Riqueza de especies"
  ) |>
  addCircleMarkers(
    data = viperidos,
    stroke = F,
    radius = 4,
    fillColor = ~colores_especies(viperidos$species),
    fillOpacity = 1.0,
    popup = paste(
      paste0("<strong>Especie: </strong>", viperidos$species),
      paste0("<strong>Localidad: </strong>", viperidos$locality),
      paste0("<strong>Fecha: </strong>", viperidos$eventDate),
      paste0("<strong>Fuente: </strong>", viperidos$institutionCode),
      paste0("<a href='", viperidos$occurrenceID, "'>Más información</a>"),
      sep = '<br/>'
    ),    
    group = "Registros de presencia"
  ) |>  
  addLegend(
    position = "bottomright",    
    pal = colores_especies,
    values = viperidos$species,
    title = "Especies",
    group = "Registros de presencia"    
  ) |>  
  addLayersControl(
    baseGroups = c(
      "Mapa general (OpenStreetMap)", 
      "Imágenes satelitales (ESRI World Imagery)"
    ),
    overlayGroups = c(
      "Riqueza de especies",
      "Registros de presencia"
    )
  ) |>
  addResetMapButton() |>
  addSearchOSM() |>
  addMouseCoordinates() |>
  addFullscreenControl() |>
  hideGroup("Registros de presencia") 

:::